const Koa = require('koa');
const app = new Koa();
const KoaRouter = require('koa-router');
const router = new KoaRouter();
const fs = require('fs'); // node_modules
const path = require('path');
// 引入 koa-bodyparser 解析 请求体数据
const bodyparser = require('koa-bodyparser');
// 把异步 callback 转成 promise，然后使用 await
const { promisify } = require('util');
const writeFilePromise = promisify(fs.writeFile);

// 使用
app.use(bodyparser());

// 业务逻辑
// 商家评分列表
router.get('/ratings', async (ctx) => {
    // 当访问 /ratings 时，执行这里面的逻辑
    const shops = require(path.join(__dirname, './data.json'));
    console.log(shops);

    // 添加口碑值
    shops.forEach((shop) => {
        shop.koubei = parseFloat(shop.score / shop.count).toFixed(1);
    });

    // 使用数组的 sort 函数进行排序
    // scort 的回调函数，返回 1 表示 a 在 b 的后面，返回 -1 表示 a 在 b 的前面
    shops.sort((a, b) => {
        // 上面口碑是字符串，不能直接比较，要转成数组比较
        return b.koubei - a.koubei > 0;
    });

    // fs.readFile('./') // 相对于 process.cwd()
    // 返回响应，相当于 ctx.response.body
    ctx.body = shops;
});

// 处理评分接口
router.post('/ratings', async (ctx) => {
    // request body 中的数据，需要使用一个第三方包来解析
    const { shopCode, shopRatings } = ctx.request.body;
    // console.log({ shopCode, shopRatings });
    // 读取商家信息 json
    let shops = require(path.join(__dirname, './data.json'));
    // console.log(shops);
    shops.forEach((shop) => {
        if (shop.code === shopCode) {
            shop.count += 1;
            shop.score += 1 * shopRatings * 10;
        }
    });
    // 保存到文件中
    await writeFilePromise(
        path.join(__dirname, './data.json'),
        JSON.stringify(shops),
        'utf-8',
    );
    // 返回响应，评分成功
    ctx.body = {
        code: 200,
        message: '评分成功',
    };
});

// 使用路由
app.use(router.routes());

// 65535
let port = 6000;
app.listen(port, () => {
    console.log(`Koa server listening at http://localhost:${port}`);
});

GET http://locahost:6000/ratings
POST http://locahost:6000/ratings